package Categorias;


import java.util.ArrayList;

import Aplicacion.Captura;
import Aplicacion.Infraccion;
import Aplicacion.MailSender;
import Aplicacion.SmsSender;
import Aplicacion.Vehiculo;
import Utils.Utils;

public class Frecuente extends Categoria {
	private Infraccion infraccion;
	private ArrayList<String> mails;
	private ArrayList<String> nrosCel;
	private MailSender mailer;
	private SmsSender smsSender;
	private static final int MAXMONTHS = 6;
	public static final int CANTIDADMINIMA = 5; 	
	
	public Frecuente(MailSender mailer, SmsSender smsSender) {
		this.mailer = mailer;
		this.smsSender = smsSender;
	}
	
	/**
	 * Env�a varios mails y sms notificando que el veh�culo es infractor frecuente
	 * @param captura Captura donde se vio al veh�culo en infracci�n	
	 */
	@Override
	public void notificar(Captura captura) {
		this.infraccion = captura.getInfraccion();
		this.mails = infraccion.getMails();
		this.nrosCel = infraccion.getNrosCel();
		for (String mail: mails){
			this.mailer.enviarMail(mail);
		}
		for (String cel : nrosCel){
			this.smsSender.enviarSMS(cel);
		}
	}

	/**
	 * Verificia si un veh�culo cumple los requisitos para pertenecer a 
	 * esta categor�a
	 * @param vehiculo Veh�culo que cometi� la infracci�n procesada
	 */
	@Override
	public void procesarAsignacion(Vehiculo vehiculo) {
		if (vehiculo.getInfracciones().size() > Frecuente.CANTIDADMINIMA) {
			vehiculo.addCategoria(this); 
		}
	}

	@Override
	public void procesarDesAsignacion(Vehiculo vehiculo) {
				
		if (Utils.isOlderThanMonths(vehiculo.getFechaLastInfraccion(), Frecuente.MAXMONTHS)){
			vehiculo.removeCategoria(this);
		}
	}
	
}
